/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package starfox;

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.StateBasedGame;

/**
 * Trabalho de Programação Orientada a Objetos
 *
 * @author Lucas José dos Santos Souza, 7126733
 *
 * Professor: Fernando Vieira Paulovich
 *
 * Imagens utilizadas:
 *      Menu principal: montagem feita com:
 *          Planeta: http://images.wikia.com/starfox/images/2/28/Corneria.jpg
 *          Arwing: http://images.wikia.com/starfox/images/2/26/Arwingassault.jpg
 *          Fox McCloud: http://t0.gstatic.com/images?q=tbn:ANd9GcQ5WIXuwki35JrMnXlY5h0cOc3ZL5gLTagXy7TnKcvwSkClQjwpKgm9gsPB
 *          Galáxias: http://starfoxwiki.org/w/images/3/36/Andross_Command_Intro.png
 *      Menus: http://img383.imageshack.us/img383/615/space0002sv1.jpg
 *      Gameplay: http://i65.servimg.com/u/f65/16/35/99/64/fotos-10.jpg
 *      Andross macaco e mãos: http://www.spriters-resource.com/snes/starfox/misc.png
 *      Andross poligonal: http://www.spriters-resource.com/snes/starfox/sheet/1408
 * 
 *      Nave Arwing, 2º e 3º sets de inimigos feitos por Augusto César Gonçalves Peres
 *      1º set de inimigos feito por Lucas José dos Santos Souza
 *
 * Músicas retiradas do jogo Super Smash Bros. Melee
 *
 * Coisas que não puderam ser resolvidas:
 *      Arquivo para guardar as melhores pontuações
 *      Animação de explosão para os personagens
 *      O NetBeans diz que o método de adicionar um efeito de cor à fonte (em GameOverStateWin
 *          e GameOverStateLose) não é seguro, pois o Slick utiliza uma List de Objects. Porém,
 *          é um método já da classe UnicodeFont, e, desde que se adicionem elementos da forma
 *          correta, não há problemas com o código.
 */

public class StarFox extends StateBasedGame {
    public static final int MAINMENUSTATE          = 0;
    public static final int GAMEPLAYSTATE          = 1;
    public static final int INSTRUCTIONSSTATE      = 2;
    public static final int CREDITSTATE            = 3;
    public static final int RECORDESSTATE          = 4;
    public static final int GAMEOVERSTATELOSE      = 5;
    public static final int GAMEOVERSTATEWIN       = 6;

    //Construtor do jogo. Adicionamos aqui os estados que o jogo terá.
    public StarFox()
    {
        super("StarFox");
        this.addState(new MainMenuState(MAINMENUSTATE));
        this.addState(new GamePlayState(GAMEPLAYSTATE));
        this.addState(new InstructionsState(INSTRUCTIONSSTATE));
        this.addState(new CreditsState(CREDITSTATE));
        this.addState(new RecordesState(RECORDESSTATE));
        this.addState(new GameOverStateLose(GAMEOVERSTATELOSE));
        this.addState(new GameOverStateWin(GAMEOVERSTATEWIN));
        
        //Iniciar no menu principal
        this.enterState(MAINMENUSTATE);
    }

    public static void main(String[] args) throws SlickException
    {
         AppGameContainer app = new AppGameContainer(new StarFox());

         app.setDisplayMode(800, 600, false);
         app.start();
    }

    @Override
    public void initStatesList(GameContainer gameContainer) throws SlickException {
        this.getState(MAINMENUSTATE).init(gameContainer, this);
    }
}